%% 三次指数平滑法预测Cubic exponential smoothing method
clc,clear 
x=0:1e-1:20;y=2*exp(-0.16*x).*sin(2*x)+1/2*x;% 原始信号
alpha=0.6;% alpha值
n=length(y);% 原始信号长度
s10=mean(y(1:3));% 取y前三个数据均值作为各次指数平滑初值
s20=s10;
s30=s10; 
s1=alpha*y(1)+(1-alpha)*s10;% 各次指数平滑值初始化 
s2=alpha*s1(1)+(1-alpha)*s20; 
s3=alpha*s2(1)+(1-alpha)*s30; 
for i=2:n+20 % 预测原始信号后20位数据值
    if i>n
        y=[y,a+b+c];% T=1时，三次指数平滑预测值，此处进行滚动预测
    end
    s1=alpha*y(i)+(1-alpha)*s1;% 各次指数平滑值迭代
    s2=alpha*s1+(1-alpha)*s2;
    s3=alpha*s2+(1-alpha)*s3;
    a=3*s1-3*s2+s3;
    b=alpha/(2*(1-alpha)^2)*((6-5*alpha)*s1-2*(5-4*alpha)*s2+(4-3*alpha)*s3);
    c=alpha^2/(2*(1-alpha)^2)*(s1-2*s2+s3);
end
plot(1:n+20,y)% 绘制预测图